class Solution {
public:
    string simplifyPath(string path) {
        string ret ;
        stack<string> st;
        // e.g path = "/a/b/./../../c/"
        // 按 '/' 进行分割为 [a, b, ., .., c]
        // 遇到 '.' 则不管
        // 遇到 ".."则弹出栈顶元素
        stringstream ss(path);
        string tmp;
        while(getline(ss, tmp, '/'))
        {
            if(tmp == "")
                continue;   // 过滤掉重复的 '/'
            if(tmp == "..")
            {
                if(!st.empty())
                    st.pop();
            }
            else if(tmp != ".")
                st.push(tmp);
        }

        // 逆序拼接栈中元素
        while(!st.empty())
        {
            ret = "/" + st.top() + ret;
            st.pop();
        }
        return ret.empty() ? "/" : ret;
    }
};